home *** CD-ROM | disk | FTP | other *** search
/ Mac Easy 2010 May / Mac Life Ubuntu.iso / casper / filesystem.squashfs / usr / include / drm / drm.h < prev    next >
Encoding:
C/C++ Source or Header  |  2009-09-09  |  21.0 KB  |  720 lines

  1. /**
  2.  * \file drm.h
  3.  * Header for the Direct Rendering Manager
  4.  *
  5.  * \author Rickard E. (Rik) Faith <faith@valinux.com>
  6.  *
  7.  * \par Acknowledgments:
  8.  * Dec 1999, Richard Henderson <rth@twiddle.net>, move to generic \c cmpxchg.
  9.  */
  10.  
  11. /*
  12.  * Copyright 1999 Precision Insight, Inc., Cedar Park, Texas.
  13.  * Copyright 2000 VA Linux Systems, Inc., Sunnyvale, California.
  14.  * All rights reserved.
  15.  *
  16.  * Permission is hereby granted, free of charge, to any person obtaining a
  17.  * copy of this software and associated documentation files (the "Software"),
  18.  * to deal in the Software without restriction, including without limitation
  19.  * the rights to use, copy, modify, merge, publish, distribute, sublicense,
  20.  * and/or sell copies of the Software, and to permit persons to whom the
  21.  * Software is furnished to do so, subject to the following conditions:
  22.  *
  23.  * The above copyright notice and this permission notice (including the next
  24.  * paragraph) shall be included in all copies or substantial portions of the
  25.  * Software.
  26.  *
  27.  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
  28.  * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
  29.  * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL
  30.  * VA LINUX SYSTEMS AND/OR ITS SUPPLIERS BE LIABLE FOR ANY CLAIM, DAMAGES OR
  31.  * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
  32.  * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
  33.  * OTHER DEALINGS IN THE SOFTWARE.
  34.  */
  35.  
  36. #ifndef _DRM_H_
  37. #define _DRM_H_
  38.  
  39. #include <asm/ioctl.h>        /* For _IO* macros */
  40. #define DRM_IOCTL_NR(n)        _IOC_NR(n)
  41. #define DRM_IOC_VOID        _IOC_NONE
  42. #define DRM_IOC_READ        _IOC_READ
  43. #define DRM_IOC_WRITE        _IOC_WRITE
  44. #define DRM_IOC_READWRITE    _IOC_READ|_IOC_WRITE
  45. #define DRM_IOC(dir, group, nr, size) _IOC(dir, group, nr, size)
  46.  
  47. #define DRM_MAJOR       226
  48. #define DRM_MAX_MINOR   15
  49.  
  50. #define DRM_NAME    "drm"      /**< Name in kernel, /dev, and /proc */
  51. #define DRM_MIN_ORDER    5      /**< At least 2^5 bytes = 32 bytes */
  52. #define DRM_MAX_ORDER    22      /**< Up to 2^22 bytes = 4MB */
  53. #define DRM_RAM_PERCENT 10      /**< How much system ram can we lock? */
  54.  
  55. #define _DRM_LOCK_HELD    0x80000000U /**< Hardware lock is held */
  56. #define _DRM_LOCK_CONT    0x40000000U /**< Hardware lock is contended */
  57. #define _DRM_LOCK_IS_HELD(lock)       ((lock) & _DRM_LOCK_HELD)
  58. #define _DRM_LOCK_IS_CONT(lock)       ((lock) & _DRM_LOCK_CONT)
  59. #define _DRM_LOCKING_CONTEXT(lock) ((lock) & ~(_DRM_LOCK_HELD|_DRM_LOCK_CONT))
  60.  
  61. typedef unsigned int drm_handle_t;
  62. typedef unsigned int drm_context_t;
  63. typedef unsigned int drm_drawable_t;
  64. typedef unsigned int drm_magic_t;
  65.  
  66. /**
  67.  * Cliprect.
  68.  *
  69.  * \warning: If you change this structure, make sure you change
  70.  * XF86DRIClipRectRec in the server as well
  71.  *
  72.  * \note KW: Actually it's illegal to change either for
  73.  * backwards-compatibility reasons.
  74.  */
  75. struct drm_clip_rect {
  76.     unsigned short x1;
  77.     unsigned short y1;
  78.     unsigned short x2;
  79.     unsigned short y2;
  80. };
  81.  
  82. /**
  83.  * Drawable information.
  84.  */
  85. struct drm_drawable_info {
  86.     unsigned int num_rects;
  87.     struct drm_clip_rect *rects;
  88. };
  89.  
  90. /**
  91.  * Texture region,
  92.  */
  93. struct drm_tex_region {
  94.     unsigned char next;
  95.     unsigned char prev;
  96.     unsigned char in_use;
  97.     unsigned char padding;
  98.     unsigned int age;
  99. };
  100.  
  101. /**
  102.  * Hardware lock.
  103.  *
  104.  * The lock structure is a simple cache-line aligned integer.  To avoid
  105.  * processor bus contention on a multiprocessor system, there should not be any
  106.  * other data stored in the same cache line.
  107.  */
  108. struct drm_hw_lock {
  109.     __volatile__ unsigned int lock;        /**< lock variable */
  110.     char padding[60];            /**< Pad to cache line */
  111. };
  112.  
  113. /**
  114.  * DRM_IOCTL_VERSION ioctl argument type.
  115.  *
  116.  * \sa drmGetVersion().
  117.  */
  118. struct drm_version {
  119.     int version_major;      /**< Major version */
  120.     int version_minor;      /**< Minor version */
  121.     int version_patchlevel;      /**< Patch level */
  122.     size_t name_len;      /**< Length of name buffer */
  123.     char *name;      /**< Name of driver */
  124.     size_t date_len;      /**< Length of date buffer */
  125.     char *date;      /**< User-space buffer to hold date */
  126.     size_t desc_len;      /**< Length of desc buffer */
  127.     char *desc;      /**< User-space buffer to hold desc */
  128. };
  129.  
  130. /**
  131.  * DRM_IOCTL_GET_UNIQUE ioctl argument type.
  132.  *
  133.  * \sa drmGetBusid() and drmSetBusId().
  134.  */
  135. struct drm_unique {
  136.     size_t unique_len;      /**< Length of unique */
  137.     char *unique;      /**< Unique name for driver instantiation */
  138. };
  139.  
  140. struct drm_list {
  141.     int count;          /**< Length of user-space structures */
  142.     struct drm_version *version;
  143. };
  144.  
  145. struct drm_block {
  146.     int unused;
  147. };
  148.  
  149. /**
  150.  * DRM_IOCTL_CONTROL ioctl argument type.
  151.  *
  152.  * \sa drmCtlInstHandler() and drmCtlUninstHandler().
  153.  */
  154. struct drm_control {
  155.     enum {
  156.         DRM_ADD_COMMAND,
  157.         DRM_RM_COMMAND,
  158.         DRM_INST_HANDLER,
  159.         DRM_UNINST_HANDLER
  160.     } func;
  161.     int irq;
  162. };
  163.  
  164. /**
  165.  * Type of memory to map.
  166.  */
  167. enum drm_map_type {
  168.     _DRM_FRAME_BUFFER = 0,      /**< WC (no caching), no core dump */
  169.     _DRM_REGISTERS = 1,      /**< no caching, no core dump */
  170.     _DRM_SHM = 2,          /**< shared, cached */
  171.     _DRM_AGP = 3,          /**< AGP/GART */
  172.     _DRM_SCATTER_GATHER = 4,  /**< Scatter/gather memory for PCI DMA */
  173.     _DRM_CONSISTENT = 5,      /**< Consistent memory for PCI DMA */
  174. };
  175.  
  176. /**
  177.  * Memory mapping flags.
  178.  */
  179. enum drm_map_flags {
  180.     _DRM_RESTRICTED = 0x01,         /**< Cannot be mapped to user-virtual */
  181.     _DRM_READ_ONLY = 0x02,
  182.     _DRM_LOCKED = 0x04,         /**< shared, cached, locked */
  183.     _DRM_KERNEL = 0x08,         /**< kernel requires access */
  184.     _DRM_WRITE_COMBINING = 0x10, /**< use write-combining if available */
  185.     _DRM_CONTAINS_LOCK = 0x20,   /**< SHM page that contains lock */
  186.     _DRM_REMOVABLE = 0x40,         /**< Removable mapping */
  187.     _DRM_DRIVER = 0x80         /**< Managed by driver */
  188. };
  189.  
  190. struct drm_ctx_priv_map {
  191.     unsigned int ctx_id;     /**< Context requesting private mapping */
  192.     void *handle;         /**< Handle of map */
  193. };
  194.  
  195. /**
  196.  * DRM_IOCTL_GET_MAP, DRM_IOCTL_ADD_MAP and DRM_IOCTL_RM_MAP ioctls
  197.  * argument type.
  198.  *
  199.  * \sa drmAddMap().
  200.  */
  201. struct drm_map {
  202.     unsigned long offset;     /**< Requested physical address (0 for SAREA)*/
  203.     unsigned long size;     /**< Requested physical size (bytes) */
  204.     enum drm_map_type type;     /**< Type of memory to map */
  205.     enum drm_map_flags flags;     /**< Flags */
  206.     void *handle;         /**< User-space: "Handle" to pass to mmap() */
  207.                  /**< Kernel-space: kernel-virtual address */
  208.     int mtrr;         /**< MTRR slot used */
  209.     /*   Private data */
  210. };
  211.  
  212. /**
  213.  * DRM_IOCTL_GET_CLIENT ioctl argument type.
  214.  */
  215. struct drm_client {
  216.     int idx;        /**< Which client desired? */
  217.     int auth;        /**< Is client authenticated? */
  218.     unsigned long pid;    /**< Process ID */
  219.     unsigned long uid;    /**< User ID */
  220.     unsigned long magic;    /**< Magic */
  221.     unsigned long iocs;    /**< Ioctl count */
  222. };
  223.  
  224. enum drm_stat_type {
  225.     _DRM_STAT_LOCK,
  226.     _DRM_STAT_OPENS,
  227.     _DRM_STAT_CLOSES,
  228.     _DRM_STAT_IOCTLS,
  229.     _DRM_STAT_LOCKS,
  230.     _DRM_STAT_UNLOCKS,
  231.     _DRM_STAT_VALUE,    /**< Generic value */
  232.     _DRM_STAT_BYTE,        /**< Generic byte counter (1024bytes/K) */
  233.     _DRM_STAT_COUNT,    /**< Generic non-byte counter (1000/k) */
  234.  
  235.     _DRM_STAT_IRQ,        /**< IRQ */
  236.     _DRM_STAT_PRIMARY,    /**< Primary DMA bytes */
  237.     _DRM_STAT_SECONDARY,    /**< Secondary DMA bytes */
  238.     _DRM_STAT_DMA,        /**< DMA */
  239.     _DRM_STAT_SPECIAL,    /**< Special DMA (e.g., priority or polled) */
  240.     _DRM_STAT_MISSED    /**< Missed DMA opportunity */
  241.         /* Add to the *END* of the list */
  242. };
  243.  
  244. /**
  245.  * DRM_IOCTL_GET_STATS ioctl argument type.
  246.  */
  247. struct drm_stats {
  248.     unsigned long count;
  249.     struct {
  250.         unsigned long value;
  251.         enum drm_stat_type type;
  252.     } data[15];
  253. };
  254.  
  255. /**
  256.  * Hardware locking flags.
  257.  */
  258. enum drm_lock_flags {
  259.     _DRM_LOCK_READY = 0x01,         /**< Wait until hardware is ready for DMA */
  260.     _DRM_LOCK_QUIESCENT = 0x02,  /**< Wait until hardware quiescent */
  261.     _DRM_LOCK_FLUSH = 0x04,         /**< Flush this context's DMA queue first */
  262.     _DRM_LOCK_FLUSH_ALL = 0x08,  /**< Flush all DMA queues first */
  263.     /* These *HALT* flags aren't supported yet
  264.        -- they will be used to support the
  265.        full-screen DGA-like mode. */
  266.     _DRM_HALT_ALL_QUEUES = 0x10, /**< Halt all current and future queues */
  267.     _DRM_HALT_CUR_QUEUES = 0x20  /**< Halt all current queues */
  268. };
  269.  
  270. /**
  271.  * DRM_IOCTL_LOCK, DRM_IOCTL_UNLOCK and DRM_IOCTL_FINISH ioctl argument type.
  272.  *
  273.  * \sa drmGetLock() and drmUnlock().
  274.  */
  275. struct drm_lock {
  276.     int context;
  277.     enum drm_lock_flags flags;
  278. };
  279.  
  280. /**
  281.  * DMA flags
  282.  *
  283.  * \warning
  284.  * These values \e must match xf86drm.h.
  285.  *
  286.  * \sa drm_dma.
  287.  */
  288. enum drm_dma_flags {
  289.     /* Flags for DMA buffer dispatch */
  290.     _DRM_DMA_BLOCK = 0x01,          /**<
  291.                        * Block until buffer dispatched.
  292.                        *
  293.                        * \note The buffer may not yet have
  294.                        * been processed by the hardware --
  295.                        * getting a hardware lock with the
  296.                        * hardware quiescent will ensure
  297.                        * that the buffer has been
  298.                        * processed.
  299.                        */
  300.     _DRM_DMA_WHILE_LOCKED = 0x02, /**< Dispatch while lock held */
  301.     _DRM_DMA_PRIORITY = 0x04,     /**< High priority dispatch */
  302.  
  303.     /* Flags for DMA buffer request */
  304.     _DRM_DMA_WAIT = 0x10,          /**< Wait for free buffers */
  305.     _DRM_DMA_SMALLER_OK = 0x20,   /**< Smaller-than-requested buffers OK */
  306.     _DRM_DMA_LARGER_OK = 0x40     /**< Larger-than-requested buffers OK */
  307. };
  308.  
  309. /**
  310.  * DRM_IOCTL_ADD_BUFS and DRM_IOCTL_MARK_BUFS ioctl argument type.
  311.  *
  312.  * \sa drmAddBufs().
  313.  */
  314. struct drm_buf_desc {
  315.     int count;         /**< Number of buffers of this size */
  316.     int size;         /**< Size in bytes */
  317.     int low_mark;         /**< Low water mark */
  318.     int high_mark;         /**< High water mark */
  319.     enum {
  320.         _DRM_PAGE_ALIGN = 0x01,    /**< Align on page boundaries for DMA */
  321.         _DRM_AGP_BUFFER = 0x02,    /**< Buffer is in AGP space */
  322.         _DRM_SG_BUFFER = 0x04,    /**< Scatter/gather memory buffer */
  323.         _DRM_FB_BUFFER = 0x08,    /**< Buffer is in frame buffer */
  324.         _DRM_PCI_BUFFER_RO = 0x10 /**< Map PCI DMA buffer read-only */
  325.     } flags;
  326.     unsigned long agp_start; /**<
  327.                   * Start address of where the AGP buffers are
  328.                   * in the AGP aperture
  329.                   */
  330. };
  331.  
  332. /**
  333.  * DRM_IOCTL_INFO_BUFS ioctl argument type.
  334.  */
  335. struct drm_buf_info {
  336.     int count;        /**< Entries in list */
  337.     struct drm_buf_desc *list;
  338. };
  339.  
  340. /**
  341.  * DRM_IOCTL_FREE_BUFS ioctl argument type.
  342.  */
  343. struct drm_buf_free {
  344.     int count;
  345.     int *list;
  346. };
  347.  
  348. /**
  349.  * Buffer information
  350.  *
  351.  * \sa drm_buf_map.
  352.  */
  353. struct drm_buf_pub {
  354.     int idx;               /**< Index into the master buffer list */
  355.     int total;               /**< Buffer size */
  356.     int used;               /**< Amount of buffer in use (for DMA) */
  357.     void *address;           /**< Address of buffer */
  358. };
  359.  
  360. /**
  361.  * DRM_IOCTL_MAP_BUFS ioctl argument type.
  362.  */
  363. struct drm_buf_map {
  364.     int count;        /**< Length of the buffer list */
  365.     void *virtual;        /**< Mmap'd area in user-virtual */
  366.     struct drm_buf_pub *list;    /**< Buffer information */
  367. };
  368.  
  369. /**
  370.  * DRM_IOCTL_DMA ioctl argument type.
  371.  *
  372.  * Indices here refer to the offset into the buffer list in drm_buf_get.
  373.  *
  374.  * \sa drmDMA().
  375.  */
  376. struct drm_dma {
  377.     int context;              /**< Context handle */
  378.     int send_count;              /**< Number of buffers to send */
  379.     int *send_indices;      /**< List of handles to buffers */
  380.     int *send_sizes;          /**< Lengths of data to send */
  381.     enum drm_dma_flags flags;      /**< Flags */
  382.     int request_count;          /**< Number of buffers requested */
  383.     int request_size;          /**< Desired size for buffers */
  384.     int *request_indices;      /**< Buffer information */
  385.     int *request_sizes;
  386.     int granted_count;          /**< Number of buffers granted */
  387. };
  388.  
  389. enum drm_ctx_flags {
  390.     _DRM_CONTEXT_PRESERVED = 0x01,
  391.     _DRM_CONTEXT_2DONLY = 0x02
  392. };
  393.  
  394. /**
  395.  * DRM_IOCTL_ADD_CTX ioctl argument type.
  396.  *
  397.  * \sa drmCreateContext() and drmDestroyContext().
  398.  */
  399. struct drm_ctx {
  400.     drm_context_t handle;
  401.     enum drm_ctx_flags flags;
  402. };
  403.  
  404. /**
  405.  * DRM_IOCTL_RES_CTX ioctl argument type.
  406.  */
  407. struct drm_ctx_res {
  408.     int count;
  409.     struct drm_ctx *contexts;
  410. };
  411.  
  412. /**
  413.  * DRM_IOCTL_ADD_DRAW and DRM_IOCTL_RM_DRAW ioctl argument type.
  414.  */
  415. struct drm_draw {
  416.     drm_drawable_t handle;
  417. };
  418.  
  419. /**
  420.  * DRM_IOCTL_UPDATE_DRAW ioctl argument type.
  421.  */
  422. typedef enum {
  423.     DRM_DRAWABLE_CLIPRECTS,
  424. } drm_drawable_info_type_t;
  425.  
  426. struct drm_update_draw {
  427.     drm_drawable_t handle;
  428.     unsigned int type;
  429.     unsigned int num;
  430.     unsigned long long data;
  431. };
  432.  
  433. /**
  434.  * DRM_IOCTL_GET_MAGIC and DRM_IOCTL_AUTH_MAGIC ioctl argument type.
  435.  */
  436. struct drm_auth {
  437.     drm_magic_t magic;
  438. };
  439.  
  440. /**
  441.  * DRM_IOCTL_IRQ_BUSID ioctl argument type.
  442.  *
  443.  * \sa drmGetInterruptFromBusID().
  444.  */
  445. struct drm_irq_busid {
  446.     int irq;    /**< IRQ number */
  447.     int busnum;    /**< bus number */
  448.     int devnum;    /**< device number */
  449.     int funcnum;    /**< function number */
  450. };
  451.  
  452. enum drm_vblank_seq_type {
  453.     _DRM_VBLANK_ABSOLUTE = 0x0,    /**< Wait for specific vblank sequence number */
  454.     _DRM_VBLANK_RELATIVE = 0x1,    /**< Wait for given number of vblanks */
  455.     _DRM_VBLANK_FLIP = 0x8000000,   /**< Scheduled buffer swap should flip */
  456.     _DRM_VBLANK_NEXTONMISS = 0x10000000,    /**< If missed, wait for next vblank */
  457.     _DRM_VBLANK_SECONDARY = 0x20000000,    /**< Secondary display controller */
  458.     _DRM_VBLANK_SIGNAL = 0x40000000    /**< Send signal instead of blocking */
  459. };
  460.  
  461. #define _DRM_VBLANK_TYPES_MASK (_DRM_VBLANK_ABSOLUTE | _DRM_VBLANK_RELATIVE)
  462. #define _DRM_VBLANK_FLAGS_MASK (_DRM_VBLANK_SIGNAL | _DRM_VBLANK_SECONDARY | \
  463.                 _DRM_VBLANK_NEXTONMISS)
  464.  
  465. struct drm_wait_vblank_request {
  466.     enum drm_vblank_seq_type type;
  467.     unsigned int sequence;
  468.     unsigned long signal;
  469. };
  470.  
  471. struct drm_wait_vblank_reply {
  472.     enum drm_vblank_seq_type type;
  473.     unsigned int sequence;
  474.     long tval_sec;
  475.     long tval_usec;
  476. };
  477.  
  478. /**
  479.  * DRM_IOCTL_WAIT_VBLANK ioctl argument type.
  480.  *
  481.  * \sa drmWaitVBlank().
  482.  */
  483. union drm_wait_vblank {
  484.     struct drm_wait_vblank_request request;
  485.     struct drm_wait_vblank_reply reply;
  486. };
  487.  
  488. #define _DRM_PRE_MODESET 1
  489. #define _DRM_POST_MODESET 2
  490.  
  491. /**
  492.  * DRM_IOCTL_MODESET_CTL ioctl argument type
  493.  *
  494.  * \sa drmModesetCtl().
  495.  */
  496. struct drm_modeset_ctl {
  497.     uint32_t crtc;
  498.     uint32_t cmd;
  499. };
  500.  
  501. /**
  502.  * DRM_IOCTL_AGP_ENABLE ioctl argument type.
  503.  *
  504.  * \sa drmAgpEnable().
  505.  */
  506. struct drm_agp_mode {
  507.     unsigned long mode;    /**< AGP mode */
  508. };
  509.  
  510. /**
  511.  * DRM_IOCTL_AGP_ALLOC and DRM_IOCTL_AGP_FREE ioctls argument type.
  512.  *
  513.  * \sa drmAgpAlloc() and drmAgpFree().
  514.  */
  515. struct drm_agp_buffer {
  516.     unsigned long size;    /**< In bytes -- will round to page boundary */
  517.     unsigned long handle;    /**< Used for binding / unbinding */
  518.     unsigned long type;    /**< Type of memory to allocate */
  519.     unsigned long physical;    /**< Physical used by i810 */
  520. };
  521.  
  522. /**
  523.  * DRM_IOCTL_AGP_BIND and DRM_IOCTL_AGP_UNBIND ioctls argument type.
  524.  *
  525.  * \sa drmAgpBind() and drmAgpUnbind().
  526.  */
  527. struct drm_agp_binding {
  528.     unsigned long handle;    /**< From drm_agp_buffer */
  529.     unsigned long offset;    /**< In bytes -- will round to page boundary */
  530. };
  531.  
  532. /**
  533.  * DRM_IOCTL_AGP_INFO ioctl argument type.
  534.  *
  535.  * \sa drmAgpVersionMajor(), drmAgpVersionMinor(), drmAgpGetMode(),
  536.  * drmAgpBase(), drmAgpSize(), drmAgpMemoryUsed(), drmAgpMemoryAvail(),
  537.  * drmAgpVendorId() and drmAgpDeviceId().
  538.  */
  539. struct drm_agp_info {
  540.     int agp_version_major;
  541.     int agp_version_minor;
  542.     unsigned long mode;
  543.     unsigned long aperture_base;    /* physical address */
  544.     unsigned long aperture_size;    /* bytes */
  545.     unsigned long memory_allowed;    /* bytes */
  546.     unsigned long memory_used;
  547.  
  548.     /* PCI information */
  549.     unsigned short id_vendor;
  550.     unsigned short id_device;
  551. };
  552.  
  553. /**
  554.  * DRM_IOCTL_SG_ALLOC ioctl argument type.
  555.  */
  556. struct drm_scatter_gather {
  557.     unsigned long size;    /**< In bytes -- will round to page boundary */
  558.     unsigned long handle;    /**< Used for mapping / unmapping */
  559. };
  560.  
  561. /**
  562.  * DRM_IOCTL_SET_VERSION ioctl argument type.
  563.  */
  564. struct drm_set_version {
  565.     int drm_di_major;
  566.     int drm_di_minor;
  567.     int drm_dd_major;
  568.     int drm_dd_minor;
  569. };
  570.  
  571. /** DRM_IOCTL_GEM_CLOSE ioctl argument type */
  572. struct drm_gem_close {
  573.     /** Handle of the object to be closed. */
  574.     uint32_t handle;
  575.     uint32_t pad;
  576. };
  577.  
  578. /** DRM_IOCTL_GEM_FLINK ioctl argument type */
  579. struct drm_gem_flink {
  580.     /** Handle for the object being named */
  581.     uint32_t handle;
  582.  
  583.     /** Returned global name */
  584.     uint32_t name;
  585. };
  586.  
  587. /** DRM_IOCTL_GEM_OPEN ioctl argument type */
  588. struct drm_gem_open {
  589.     /** Name of object being opened */
  590.     uint32_t name;
  591.  
  592.     /** Returned handle for the object */
  593.     uint32_t handle;
  594.  
  595.     /** Returned size of the object */
  596.     uint64_t size;
  597. };
  598.  
  599. #define DRM_IOCTL_BASE            'd'
  600. #define DRM_IO(nr)            _IO(DRM_IOCTL_BASE,nr)
  601. #define DRM_IOR(nr,type)        _IOR(DRM_IOCTL_BASE,nr,type)
  602. #define DRM_IOW(nr,type)        _IOW(DRM_IOCTL_BASE,nr,type)
  603. #define DRM_IOWR(nr,type)        _IOWR(DRM_IOCTL_BASE,nr,type)
  604.  
  605. #define DRM_IOCTL_VERSION        DRM_IOWR(0x00, struct drm_version)
  606. #define DRM_IOCTL_GET_UNIQUE        DRM_IOWR(0x01, struct drm_unique)
  607. #define DRM_IOCTL_GET_MAGIC        DRM_IOR( 0x02, struct drm_auth)
  608. #define DRM_IOCTL_IRQ_BUSID        DRM_IOWR(0x03, struct drm_irq_busid)
  609. #define DRM_IOCTL_GET_MAP               DRM_IOWR(0x04, struct drm_map)
  610. #define DRM_IOCTL_GET_CLIENT            DRM_IOWR(0x05, struct drm_client)
  611. #define DRM_IOCTL_GET_STATS             DRM_IOR( 0x06, struct drm_stats)
  612. #define DRM_IOCTL_SET_VERSION        DRM_IOWR(0x07, struct drm_set_version)
  613. #define DRM_IOCTL_MODESET_CTL           DRM_IOW(0x08, struct drm_modeset_ctl)
  614. #define DRM_IOCTL_GEM_CLOSE        DRM_IOW (0x09, struct drm_gem_close)
  615. #define DRM_IOCTL_GEM_FLINK        DRM_IOWR(0x0a, struct drm_gem_flink)
  616. #define DRM_IOCTL_GEM_OPEN        DRM_IOWR(0x0b, struct drm_gem_open)
  617.  
  618. #define DRM_IOCTL_SET_UNIQUE        DRM_IOW( 0x10, struct drm_unique)
  619. #define DRM_IOCTL_AUTH_MAGIC        DRM_IOW( 0x11, struct drm_auth)
  620. #define DRM_IOCTL_BLOCK            DRM_IOWR(0x12, struct drm_block)
  621. #define DRM_IOCTL_UNBLOCK        DRM_IOWR(0x13, struct drm_block)
  622. #define DRM_IOCTL_CONTROL        DRM_IOW( 0x14, struct drm_control)
  623. #define DRM_IOCTL_ADD_MAP        DRM_IOWR(0x15, struct drm_map)
  624. #define DRM_IOCTL_ADD_BUFS        DRM_IOWR(0x16, struct drm_buf_desc)
  625. #define DRM_IOCTL_MARK_BUFS        DRM_IOW( 0x17, struct drm_buf_desc)
  626. #define DRM_IOCTL_INFO_BUFS        DRM_IOWR(0x18, struct drm_buf_info)
  627. #define DRM_IOCTL_MAP_BUFS        DRM_IOWR(0x19, struct drm_buf_map)
  628. #define DRM_IOCTL_FREE_BUFS        DRM_IOW( 0x1a, struct drm_buf_free)
  629.  
  630. #define DRM_IOCTL_RM_MAP        DRM_IOW( 0x1b, struct drm_map)
  631.  
  632. #define DRM_IOCTL_SET_SAREA_CTX        DRM_IOW( 0x1c, struct drm_ctx_priv_map)
  633. #define DRM_IOCTL_GET_SAREA_CTX     DRM_IOWR(0x1d, struct drm_ctx_priv_map)
  634.  
  635. #define DRM_IOCTL_ADD_CTX        DRM_IOWR(0x20, struct drm_ctx)
  636. #define DRM_IOCTL_RM_CTX        DRM_IOWR(0x21, struct drm_ctx)
  637. #define DRM_IOCTL_MOD_CTX        DRM_IOW( 0x22, struct drm_ctx)
  638. #define DRM_IOCTL_GET_CTX        DRM_IOWR(0x23, struct drm_ctx)
  639. #define DRM_IOCTL_SWITCH_CTX        DRM_IOW( 0x24, struct drm_ctx)
  640. #define DRM_IOCTL_NEW_CTX        DRM_IOW( 0x25, struct drm_ctx)
  641. #define DRM_IOCTL_RES_CTX        DRM_IOWR(0x26, struct drm_ctx_res)
  642. #define DRM_IOCTL_ADD_DRAW        DRM_IOWR(0x27, struct drm_draw)
  643. #define DRM_IOCTL_RM_DRAW        DRM_IOWR(0x28, struct drm_draw)
  644. #define DRM_IOCTL_DMA            DRM_IOWR(0x29, struct drm_dma)
  645. #define DRM_IOCTL_LOCK            DRM_IOW( 0x2a, struct drm_lock)
  646. #define DRM_IOCTL_UNLOCK        DRM_IOW( 0x2b, struct drm_lock)
  647. #define DRM_IOCTL_FINISH        DRM_IOW( 0x2c, struct drm_lock)
  648.  
  649. #define DRM_IOCTL_AGP_ACQUIRE        DRM_IO(  0x30)
  650. #define DRM_IOCTL_AGP_RELEASE        DRM_IO(  0x31)
  651. #define DRM_IOCTL_AGP_ENABLE        DRM_IOW( 0x32, struct drm_agp_mode)
  652. #define DRM_IOCTL_AGP_INFO        DRM_IOR( 0x33, struct drm_agp_info)
  653. #define DRM_IOCTL_AGP_ALLOC        DRM_IOWR(0x34, struct drm_agp_buffer)
  654. #define DRM_IOCTL_AGP_FREE        DRM_IOW( 0x35, struct drm_agp_buffer)
  655. #define DRM_IOCTL_AGP_BIND        DRM_IOW( 0x36, struct drm_agp_binding)
  656. #define DRM_IOCTL_AGP_UNBIND        DRM_IOW( 0x37, struct drm_agp_binding)
  657.  
  658. #define DRM_IOCTL_SG_ALLOC        DRM_IOWR(0x38, struct drm_scatter_gather)
  659. #define DRM_IOCTL_SG_FREE        DRM_IOW( 0x39, struct drm_scatter_gather)
  660.  
  661. #define DRM_IOCTL_WAIT_VBLANK        DRM_IOWR(0x3a, union drm_wait_vblank)
  662.  
  663. #define DRM_IOCTL_UPDATE_DRAW        DRM_IOW(0x3f, struct drm_update_draw)
  664.  
  665. /**
  666.  * Device specific ioctls should only be in their respective headers
  667.  * The device specific ioctl range is from 0x40 to 0x99.
  668.  * Generic IOCTLS restart at 0xA0.
  669.  *
  670.  * \sa drmCommandNone(), drmCommandRead(), drmCommandWrite(), and
  671.  * drmCommandReadWrite().
  672.  */
  673. #define DRM_COMMAND_BASE                0x40
  674. #define DRM_COMMAND_END            0xA0
  675.  
  676. /* typedef area */
  677. typedef struct drm_clip_rect drm_clip_rect_t;
  678. typedef struct drm_drawable_info drm_drawable_info_t;
  679. typedef struct drm_tex_region drm_tex_region_t;
  680. typedef struct drm_hw_lock drm_hw_lock_t;
  681. typedef struct drm_version drm_version_t;
  682. typedef struct drm_unique drm_unique_t;
  683. typedef struct drm_list drm_list_t;
  684. typedef struct drm_block drm_block_t;
  685. typedef struct drm_control drm_control_t;
  686. typedef enum drm_map_type drm_map_type_t;
  687. typedef enum drm_map_flags drm_map_flags_t;
  688. typedef struct drm_ctx_priv_map drm_ctx_priv_map_t;
  689. typedef struct drm_map drm_map_t;
  690. typedef struct drm_client drm_client_t;
  691. typedef enum drm_stat_type drm_stat_type_t;
  692. typedef struct drm_stats drm_stats_t;
  693. typedef enum drm_lock_flags drm_lock_flags_t;
  694. typedef struct drm_lock drm_lock_t;
  695. typedef enum drm_dma_flags drm_dma_flags_t;
  696. typedef struct drm_buf_desc drm_buf_desc_t;
  697. typedef struct drm_buf_info drm_buf_info_t;
  698. typedef struct drm_buf_free drm_buf_free_t;
  699. typedef struct drm_buf_pub drm_buf_pub_t;
  700. typedef struct drm_buf_map drm_buf_map_t;
  701. typedef struct drm_dma drm_dma_t;
  702. typedef union drm_wait_vblank drm_wait_vblank_t;
  703. typedef struct drm_agp_mode drm_agp_mode_t;
  704. typedef enum drm_ctx_flags drm_ctx_flags_t;
  705. typedef struct drm_ctx drm_ctx_t;
  706. typedef struct drm_ctx_res drm_ctx_res_t;
  707. typedef struct drm_draw drm_draw_t;
  708. typedef struct drm_update_draw drm_update_draw_t;
  709. typedef struct drm_auth drm_auth_t;
  710. typedef struct drm_irq_busid drm_irq_busid_t;
  711. typedef enum drm_vblank_seq_type drm_vblank_seq_type_t;
  712.  
  713. typedef struct drm_agp_buffer drm_agp_buffer_t;
  714. typedef struct drm_agp_binding drm_agp_binding_t;
  715. typedef struct drm_agp_info drm_agp_info_t;
  716. typedef struct drm_scatter_gather drm_scatter_gather_t;
  717. typedef struct drm_set_version drm_set_version_t;
  718.  
  719. #endif
  720.